/*
 * @Author: SeonHu
 * @Date: 2025-09-16 14:44:20
 * @LastEditors: SeonHu
 * @LastEditTime: 2025-09-22 16:28:30
 * @FilePath: \bg-vben\types\identity.ts
 * @Description:
 * Copyright © 2020-2025 SANQING Corporation, All rights reserved.
 */
import { ChineseZodiacSignEnum } from '@/enums/chineseZodiacSignEnum';
import { GenderEnum } from '@/enums/genderEnum';
import { OrganizationTypeEnum } from '@/enums/organizationTypeEnum';
import { StarSignEnum } from '@/enums/starSignEnum';

/** 请求的客户端类型 */
export enum RequestClientTypeEnum {
  /** 浏览器 */
  Browser = 1,
  /** 桌面客户端 */
  Desktop = 2,
  /** 移动客户端 */
  Mobile = 3,
}
/** 第三方认证服务提供商 */
export enum OAuth2ProviderEnum {
  /** 微信 */
  WeChat = 1,
  /** 钉钉 */
  DingTalk = 2,
  /** 抖音 */
  DouYin = 3,
  /** QQ */
  QQ = 4,
  /** 微软账户 */
  Microsoft = 5,
  /** GitHub账户 */
  GitHub = 6,
}

/** 第三方用户登录信息 */
export interface UserLoginInfoEx {
  /** 登录提供程序 */
  LoginProvider?: null | string | undefined;
  /** 登录唯一标识 */
  ProviderKey: string;
  /** 显示名称 */
  DisplayName?: null | string | undefined;

  /** 头像URL */
  AvatarUrl?: null | string | undefined;
  /** 注册IP */
  RegisterIp?: null | string | undefined;
  /** 登录账号 */
  Account?: null | string | undefined;
  /** 登录密码 */
  Password?: null | string | undefined;
}

/** JwtToken模型 */
export interface JsonWebToken {
  /** 用于业务身份认证的访问令牌 */
  AccessToken: string;
  /** 访问令牌有效期，UTC标准。 */
  AccessTokenExpiresUtc: bigint | string;
  /** 用于刷新访问令牌的刷新令牌 */
  RefreshToken: string;
  /** 刷新令牌有效期，UTC标准。 */
  RefreshTokenExpiresUtc: bigint | string;
}

/** 在线角色 */
export interface OnlineRole {
  /** 角色编号 */
  Id: string;
  /** 角色名称 */
  Name: string;
  /** 角色描述 */
  Remark: null | string | undefined;
  /** 是否管理员角色 */
  IsAdmin: boolean;
}

/**  用户信息 */
export interface UserInfo {
  /** 用户编号 */
  UserId: string;
  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;
  /** 电子邮箱 */
  Email: string;
  /** 手机号码 */
  PhoneNumber: string;

  /** 电子头像 */
  Avatar: string;
  /** 电子签名 */
  Signature: string;

  /** 性别 */
  Gender: GenderEnum;
  /** 生日 */
  Birthday?: Date;
  /** 血型 */
  BloodType?: string;
  /** 标签 */
  Tag?: string[];
  /** 头衔 */
  Title?: string[];
  /** 地址 */
  Address?: string;
  /** 简介 */
  Profile?: string;
  /** 个性签名 */
  Sign?: string;
  /** 备注 */
  Remark: string;

  /** 农历生日 */
  ChineseBirthday?: Date;
  /** 年龄 */
  Age?: number;
  /** 生肖 */
  ZodiacSign?: ChineseZodiacSignEnum;
  /** 星座 */
  StarSign?: StarSignEnum;

  /** 是否管理员 */
  IsAdmin: boolean;

  /** 下次请求是否刷新AccessToken */
  IsRefreshNext: boolean;

  /** 用户角色 */
  Roles: OnlineRole[];

  /** 当前组织机构 */
  CurrentOrganization: OrganizationIdentity;
  /** 当前部门机构 */
  CurrentDepartment: OrganizationIdentity;

  /** 扩展数据字典 */
  ExtendData: { [key: string]: string };

  /** 用户自定义主页 */
  HomePath?: string;
}

/** 组织机构身份 */
export interface OrganizationIdentity {
  /** 组织机构编号 */
  Id: string;

  /** 组织机构类型 */
  Type: OrganizationTypeEnum;
  /** 组织机构名称 */
  Name: string;
}
